package chapter2_5_seeable;

/**
 * 那么一般在什么时候才使用volatile 关键字呢？
 * · 写入变量值不依赖、变量的当前值时。因为如果依赖当前值，将是获取一计算一写入
 * 三步操作，这三步操作不是原子性的，而vo latile 不保证原子性。
 * · 读写变量值时没有加锁。因为加锁本身已经保证了内存可见性，这时候不需要把变
 * 量声明为volatile 的。
 *
 * @author huayuhao
 * @date 2020/12/16 14:32
 */
public class SeeTest {
}

class ThreadNotSaveInteger {
    private int value;

    public int getValue() {
        return this.value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

class ThreadSaveIntegerWithSynchronized{
    private int value;

    public synchronized int getValue() {
        return this.value;
    }

    public synchronized void setValue(int value) {
        this.value = value;
    }
}

class ThreadSaveIntegerWithVolatile{
    private volatile int value;

    public int getValue() {
        return this.value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}
